# -*- mode:python -*-

# Copyright (c) 2009, 2012-2013, 2020 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
# not be construed as granting a license to any other intellectual
# property including but not limited to intellectual property relating
# to a hardware implementation of the functionality of the software
# licensed hereunder.  You may use the software subject to the license
# terms below provided that you ensure that this notice is replicated
# unmodified and in its entirety in all distributions of the software,
# modified or unmodified, in source code or in binary form.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Import('*')

SimObject('AbstractNVM.py', sim_objects=['AbstractNVM'], tags='arm isa')
SimObject('Display.py', sim_objects=['Display'], tags='arm isa')
SimObject('Doorbell.py', sim_objects=['Doorbell'], tags='arm isa')
SimObject('FlashDevice.py', sim_objects=['FlashDevice'],
        enums=['DataDistribution'], tags='arm isa')
SimObject('GenericTimer.py', sim_objects=[
    'SystemCounter', 'GenericTimer', 'GenericTimerFrame',
    'GenericTimerMem'], tags='arm isa')
SimObject('Gic.py', sim_objects=[
    'BaseGic', 'ArmInterruptPin', 'ArmSPI', 'ArmPPI', 'ArmSigInterruptPin',
    'GicV2', 'Gicv2mFrame', 'Gicv2m', 'VGic', 'Gicv3Its', 'Gicv3'],
    enums=['ArmInterruptType'], tags='arm isa')
SimObject('Mpam.py', sim_objects=['MpamMSC'], tags='arm isa')
SimObject('RealView.py', sim_objects=[
    'AmbaPioDevice', 'AmbaIntDevice', 'AmbaDmaDevice', 'A9SCU',
    'GenericArmPciHost', 'RealViewCtrl', 'RealViewOsc',
    'RealViewTemperatureSensor', 'AmbaFake', 'Pl011', 'Sp804', 'Sp805',
    'GenericWatchdog', 'CpuLocalTimer', 'PL031', 'Pl050', 'Pl111', 'HDLcd',
    'FVPBasePwrCtrl', 'RealView', 'SysSecCtrl'],
    enums=['ArmPciIntRouting'], tags='arm isa')
SimObject('SMMUv3.py', sim_objects=['SMMUv3DeviceInterface', 'SMMUv3'],
    tags='arm isa')
SimObject('UFSHostDevice.py', sim_objects=['UFSHostDevice'], tags='arm isa')
SimObject('EnergyCtrl.py', sim_objects=['EnergyCtrl'], tags='arm isa')
SimObject('NoMali.py', sim_objects=['NoMaliGpu', 'CustomNoMaliGpu'],
    enums=['NoMaliGpuType'], tags='arm isa')
SimObject('VirtIOMMIO.py', sim_objects=['MmioVirtIO'], tags='arm isa')
if env['CONF']['USE_ARM_FASTMODEL']:
    SimObject('VExpressFastmodel.py', sim_objects=[], tags='arm isa')

Source('a9scu.cc', tags='arm isa')
Source('amba_device.cc', tags='arm isa')
Source('amba_fake.cc', tags='arm isa')
Source('base_gic.cc', tags='arm isa')
Source('display.cc', tags='arm isa')
Source('flash_device.cc', tags='arm isa')
Source('generic_timer.cc', tags='arm isa')
Source('gic_v2.cc', tags='arm isa')
Source('gic_v2m.cc', tags='arm isa')
Source('gic_v3.cc', tags='arm isa')
Source('gic_v3_cpu_interface.cc', tags='arm isa')
Source('gic_v3_distributor.cc', tags='arm isa')
Source('gic_v3_redistributor.cc', tags='arm isa')
Source('gic_v3_its.cc', tags='arm isa')
Source('mpam.cc', tags='arm isa')
Source('pl011.cc', tags='arm isa')
Source('pl111.cc', tags='arm isa')
Source('hdlcd.cc', tags='arm isa')
Source('kmi.cc', tags='arm isa')
Source('smmu_v3.cc', tags='arm isa');
Source('smmu_v3_caches.cc', tags='arm isa');
Source('smmu_v3_cmdexec.cc', tags='arm isa');
Source('smmu_v3_defs.cc', tags='arm isa');
Source('smmu_v3_events.cc', tags='arm isa');
Source('smmu_v3_ports.cc', tags='arm isa');
Source('smmu_v3_proc.cc', tags='arm isa');
Source('smmu_v3_deviceifc.cc', tags='arm isa');
Source('smmu_v3_transl.cc', tags='arm isa');
Source('ssc.cc', tags='arm isa');
Source('timer_sp804.cc', tags='arm isa')
Source('watchdog_generic.cc', tags='arm isa')
Source('watchdog_sp805.cc', tags='arm isa')
Source('gpu_nomali.cc', tags='arm isa')
Source('pci_host.cc', tags='arm isa')
Source('rv_ctrl.cc', tags='arm isa')
Source('realview.cc', tags='arm isa')
Source('rtc_pl031.cc', tags='arm isa')
Source('timer_cpulocal.cc', tags='arm isa')
Source('vgic.cc', tags='arm isa')
Source('vio_mmio.cc', tags='arm isa')
Source('ufs_device.cc', tags='arm isa')
Source('energy_ctrl.cc', tags='arm isa')
Source('fvp_base_pwr_ctrl.cc', tags='arm isa')

DebugFlag('AMBA', tags='arm isa')
DebugFlag('FlashDevice', tags='arm isa')
DebugFlag('HDLcd', tags='arm isa')
DebugFlag('PL111', tags='arm isa')
DebugFlag('GICV2M', tags='arm isa')
DebugFlag('Pl050', tags='arm isa')
DebugFlag('GIC', tags='arm isa')
DebugFlag('ITS', tags='arm isa')
DebugFlag('RVCTRL', tags='arm isa')
DebugFlag('SMMUv3', tags='arm isa')
DebugFlag('SMMUv3Hazard', tags='arm isa')
DebugFlag('Sp805', tags='arm isa')
DebugFlag('EnergyCtrl', tags='arm isa')
DebugFlag('FVPBasePwrCtrl', tags='arm isa')
DebugFlag('UFSHostDevice', tags='arm isa')
DebugFlag('VGIC', tags='arm isa')
DebugFlag('NoMali', tags='arm isa')
